package Construibles;

import java.util.ArrayList;
import java.util.Iterator;

import Juego.Jugador;
import MapaStuff.Hectarea;
import MapaStuff.SuperficieAgua;
import MapaStuff.SuperficiePlana;
import RedStuff.ClienteElectrico;
import RedStuff.ConectorElectrico;
import RedStuff.FuenteElectrica;
import RedStuff.RedElectrica;
import Ubicacion.ZonaCircundante;

public abstract class CentralElectrica extends ConectorUniversal implements FuenteElectrica  {
	
	protected int potencia;
	protected int radio;
	
	public void daniadoPorGodzilla() {
		this.daniar(35);
	}
	
	public CentralElectrica() {
		super();
		this.potencia=0;
		this.radio=0;
	}
	
	
	
	public void suministrarAClientesConectados(RedElectrica red){
		if(estaDestruido){
			return;
		}
		int potenciaAGastar=potencia;
		ArrayList<ClienteElectrico> clientes=new ArrayList<ClienteElectrico>();
		this.conectarConVecinosYDevolverClientes(red, clientes);
		ClienteElectrico cliente;
		Iterator<ClienteElectrico> it=clientes.iterator();
		while(it.hasNext() && potenciaAGastar>0){
			cliente=it.next();
			potenciaAGastar=cliente.consumirPotencia(potenciaAGastar);
		}
		ZonaCircundante alrededor=new ZonaCircundante();
		ArrayList<Hectarea> hectareas=alrededor.darHectareasAlRededor(hectareaActual,radio);
		for(Hectarea hectarea:hectareas){
			if(potenciaAGastar==0){ 
				return;
			}
			potenciaAGastar=(red.buscarCliente(hectarea)).consumirPotencia(potenciaAGastar);
		}
	}
	
	
	
	@Override
	public boolean sePuedeConstruirEn (SuperficieAgua agua){
		return false;
	}
	
	@Override
	public boolean sePuedeConstruirEn (SuperficiePlana plana){
		return true;
	}
	
	@Override
	public void agregarseARedes(Jugador jugador) {
		jugador.agregarARedElectrica((FuenteElectrica)this);
		
	}
	
	public void desconectarseRedes(Jugador jugador){
		jugador.removerDeRedElectrica((FuenteElectrica)this);
	}
	
	@Override
	public void conectarConVecinosYDevolverClientes(RedElectrica red,ArrayList<ClienteElectrico> clientes) {
		super.conectarConVecinosYDevolverClientes(red, clientes,false);
	}
	
	protected boolean sePuedeConectarAvecino(ConectorElectrico conector){
		return ((ConectorElectrico)conector).sePuedeConectar((FuenteElectrica)this);
	}
	
	public boolean sePuedeConectar(ConectorElectrico conector){
		return conector.sePuedeConectar(this);
	}
	
	public boolean sePuedeConectar(FuenteElectrica fuente){
		return false;
	}
	public boolean sePuedeConectar(ClienteElectrico cliente){
		return false;
	}
	
	public String informacion(){
		return "Potencia="+Integer.toString(potencia)+"\n Radio="+Integer.toString(radio);
	}
}
